package leetcode周赛288;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class 奇偶交换的最大数字 {
	public static void main(String []args) {
		System.out.println(solution(65875));
		System.out.println(solutionAfter(65875));
	}
	/**
	 * 比赛    时 匆忙 写 出来的 代码 
	 * 其实 当时 这个 思路 也 想出来 了
	 * 只不过 实现的 过程中 有各种各样的 不确定
	 * 代码coding 过程 各种容器的 选择问题
	 * 上面  容易出现 一些问题
	 *一开始 想的   是  用 数组
	 *后面 又想着 用ArrayList 
	 */
	public static int solution(int  value) {
		String str = value + "";
//		char [] odd = new char[str.length()];
		int k = 0,j = 0;
		ArrayList<Character> odd = new ArrayList<>();
		int [] oddnum = new int [str.length()];
//		char [] doubleNum = new char [str.length()];
		ArrayList<Character> doubleNum = new ArrayList<>();
		int doublenum  [] = new int [str.length()];
//		int [] intDouble =  new int [str.length()];
		for(int i = 0 ;i < str.length();i++) {
			char  ch = str.charAt(i);
			if(((ch - '0') & 1) == 0) {
				doubleNum.add(ch);
				doublenum[k++] = i;
			}
			else {
				odd.add(ch);
				oddnum[j++] = i;
			}
		}
		char []  ans = str.toCharArray();
		Collections.sort(odd,new Comparator<Character>() {

			@Override
			public int compare(Character o1, Character o2) {
				// TODO Auto-generated method stub
				return o2 - o1;
			}
			
		});
		Collections.sort(doubleNum,new Comparator<Character>() {

			@Override
			public int compare(Character o1, Character o2) {
				// TODO Auto-generated method stub
				return o2 - o1;
			}
			
		});
		int x = 0;
		for(char c : odd) {
			ans[oddnum[x++]] = c;
		}
		x = 0;
		for(char c : doubleNum) {
			ans[doublenum[x++]] = c;
		}
		StringBuilder retu  = new StringBuilder();
		for(char c : ans) {
			retu.append(c);
		}
		return Integer.parseInt(retu.toString());
	}
	/**
	 * 赛后题解
	 */
	public static int solutionAfter(int value) {
//		String str = value + "";
		char str []= (value + "").toCharArray();
		ArrayList<Character> odd  = new ArrayList<>();
		ArrayList<Character> even = new ArrayList<>();
		ArrayList<Integer> oddIndex  = new ArrayList<>();
		ArrayList<Integer>  evenIndex = new ArrayList<>();
		for(int i = 0;i < str.length;i++) {
//			char ch = str.charAt(i);
			char ch = str[i];
			if((ch - '0' & 1) == 0) {
				even.add(ch);
				evenIndex.add(i);
			}
			else {
				odd.add(ch);
				oddIndex.add(i);
			}
		}
/**
 *  将 收集  好的 odd  和 even 进行 排序        按照 index 重组 
 *  
 *  注意 看  刚好全站 竞赛 排名第二的 大神
 *  用的 是 java
 *  的   ac  的  代码
 */
		Collections.sort(odd,new MyComparator());
		Collections.sort(even,new MyComparator());
		
		
		for(int  i = 0;i < odd.size(); i++) {
		    	str[oddIndex.get(i)] = odd.get(i);
		}
		for(int i = 0;i < even.size();i++) {
			str[evenIndex.get(i)] = even.get(i);
		}
		StringBuilder ans  = new StringBuilder();
		for(int i = 0;i < str.length;i++) {
			ans.append(str[i]);
		}
		return Integer.parseInt(ans.toString());
	}
	static class MyComparator implements Comparator<Character> {

		@Override
		public int compare(Character o1, Character o2) {
			// TODO Auto-generated method stub
//			  按照降序 排列
			return o2 - o1;
		}
		
	}

}
